{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "8a5effd5",
   "metadata": {},
   "source": [
    "# Preparation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1dc37e9d",
   "metadata": {},
   "source": [
    "## Install MuJoCo, MJX, and Brax"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e9cd4ab9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: mujoco in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (3.3.4)\n",
      "Requirement already satisfied: absl-py in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco) (2.3.1)\n",
      "Requirement already satisfied: etils[epath] in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco) (1.12.2)\n",
      "Requirement already satisfied: glfw in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco) (2.9.0)\n",
      "Requirement already satisfied: numpy in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco) (2.3.1)\n",
      "Requirement already satisfied: pyopengl in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco) (3.1.9)\n",
      "Requirement already satisfied: fsspec in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco) (2025.5.1)\n",
      "Requirement already satisfied: importlib_resources in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco) (6.5.2)\n",
      "Requirement already satisfied: typing_extensions in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco) (4.14.1)\n",
      "Requirement already satisfied: zipp in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco) (3.23.0)\n",
      "Collecting mujoco_mjx\n",
      "  Downloading mujoco_mjx-3.3.4-py3-none-any.whl.metadata (3.4 kB)\n",
      "Requirement already satisfied: absl-py in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco_mjx) (2.3.1)\n",
      "Requirement already satisfied: etils[epath] in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco_mjx) (1.12.2)\n",
      "Collecting jax (from mujoco_mjx)\n",
      "  Downloading jax-0.7.0-py3-none-any.whl.metadata (13 kB)\n",
      "Collecting jaxlib (from mujoco_mjx)\n",
      "  Downloading jaxlib-0.7.0-cp313-cp313-macosx_11_0_arm64.whl.metadata (1.3 kB)\n",
      "Requirement already satisfied: mujoco>=3.3.4.dev0 in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco_mjx) (3.3.4)\n",
      "Requirement already satisfied: scipy in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco_mjx) (1.16.0)\n",
      "Collecting trimesh (from mujoco_mjx)\n",
      "  Using cached trimesh-4.7.1-py3-none-any.whl.metadata (18 kB)\n",
      "Requirement already satisfied: glfw in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco>=3.3.4.dev0->mujoco_mjx) (2.9.0)\n",
      "Requirement already satisfied: numpy in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco>=3.3.4.dev0->mujoco_mjx) (2.3.1)\n",
      "Requirement already satisfied: pyopengl in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco>=3.3.4.dev0->mujoco_mjx) (3.1.9)\n",
      "Requirement already satisfied: fsspec in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco_mjx) (2025.5.1)\n",
      "Requirement already satisfied: importlib_resources in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco_mjx) (6.5.2)\n",
      "Requirement already satisfied: typing_extensions in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco_mjx) (4.14.1)\n",
      "Requirement already satisfied: zipp in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco_mjx) (3.23.0)\n",
      "Collecting ml_dtypes>=0.5.0 (from jax->mujoco_mjx)\n",
      "  Downloading ml_dtypes-0.5.3-cp313-cp313-macosx_10_13_universal2.whl.metadata (8.9 kB)\n",
      "Collecting opt_einsum (from jax->mujoco_mjx)\n",
      "  Downloading opt_einsum-3.4.0-py3-none-any.whl.metadata (6.3 kB)\n",
      "Downloading mujoco_mjx-3.3.4-py3-none-any.whl (6.7 MB)\n",
      "\u001b[2K   \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.7/6.7 MB\u001b[0m \u001b[31m10.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m[36m0:00:01\u001b[0m[36m0:00:01\u001b[0m01\u001b[0m\n",
      "\u001b[?25hDownloading jax-0.7.0-py3-none-any.whl (2.8 MB)\n",
      "\u001b[2K   \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.8/2.8 MB\u001b[0m \u001b[31m11.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\n",
      "\u001b[?25hDownloading jaxlib-0.7.0-cp313-cp313-macosx_11_0_arm64.whl (56.7 MB)\n",
      "\u001b[2K   \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.7/56.7 MB\u001b[0m \u001b[31m11.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m[36m0:00:01\u001b[0mm eta \u001b[36m0:00:01\u001b[0m\n",
      "\u001b[?25hDownloading ml_dtypes-0.5.3-cp313-cp313-macosx_10_13_universal2.whl (663 kB)\n",
      "\u001b[2K   \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m663.8/663.8 kB\u001b[0m \u001b[31m14.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[?25hDownloading opt_einsum-3.4.0-py3-none-any.whl (71 kB)\n",
      "Using cached trimesh-4.7.1-py3-none-any.whl (709 kB)\n",
      "Installing collected packages: trimesh, opt_einsum, ml_dtypes, jaxlib, jax, mujoco_mjx\n",
      "\u001b[2K   \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6/6\u001b[0m [mujoco_mjx]\u001b[0m \u001b[32m5/6\u001b[0m [mujoco_mjx]\n",
      "\u001b[1A\u001b[2KSuccessfully installed jax-0.7.0 jaxlib-0.7.0 ml_dtypes-0.5.3 mujoco_mjx-3.3.4 opt_einsum-3.4.0 trimesh-4.7.1\n",
      "Collecting brax\n",
      "  Downloading brax-0.12.4-py3-none-any.whl.metadata (20 kB)\n",
      "Requirement already satisfied: absl-py in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (2.3.1)\n",
      "Requirement already satisfied: etils in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (1.12.2)\n",
      "Collecting flask (from brax)\n",
      "  Using cached flask-3.1.1-py3-none-any.whl.metadata (3.0 kB)\n",
      "Collecting flask-cors (from brax)\n",
      "  Downloading flask_cors-6.0.1-py3-none-any.whl.metadata (5.3 kB)\n",
      "Collecting flax (from brax)\n",
      "  Downloading flax-0.11.0-py3-none-any.whl.metadata (11 kB)\n",
      "Requirement already satisfied: jax>=0.4.6 in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (0.7.0)\n",
      "Requirement already satisfied: jaxlib>=0.4.6 in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (0.7.0)\n",
      "Collecting jaxopt (from brax)\n",
      "  Downloading jaxopt-0.8.5-py3-none-any.whl.metadata (3.3 kB)\n",
      "Requirement already satisfied: jinja2 in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (3.1.6)\n",
      "Collecting ml-collections (from brax)\n",
      "  Downloading ml_collections-1.1.0-py3-none-any.whl.metadata (22 kB)\n",
      "Requirement already satisfied: mujoco in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (3.3.4)\n",
      "Requirement already satisfied: mujoco-mjx in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (3.3.4)\n",
      "Requirement already satisfied: numpy in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (2.3.1)\n",
      "Collecting optax (from brax)\n",
      "  Downloading optax-0.2.5-py3-none-any.whl.metadata (7.5 kB)\n",
      "Collecting orbax-checkpoint (from brax)\n",
      "  Downloading orbax_checkpoint-0.11.20-py3-none-any.whl.metadata (2.3 kB)\n",
      "Requirement already satisfied: pillow in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (11.3.0)\n",
      "Requirement already satisfied: scipy in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (1.16.0)\n",
      "Collecting tensorboardx (from brax)\n",
      "  Downloading tensorboardx-2.6.4-py3-none-any.whl.metadata (6.2 kB)\n",
      "Requirement already satisfied: trimesh in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (4.7.1)\n",
      "Requirement already satisfied: typing-extensions in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from brax) (4.14.1)\n",
      "Requirement already satisfied: ml_dtypes>=0.5.0 in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from jax>=0.4.6->brax) (0.5.3)\n",
      "Requirement already satisfied: opt_einsum in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from jax>=0.4.6->brax) (3.4.0)\n",
      "Collecting blinker>=1.9.0 (from flask->brax)\n",
      "  Using cached blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB)\n",
      "Collecting click>=8.1.3 (from flask->brax)\n",
      "  Using cached click-8.2.1-py3-none-any.whl.metadata (2.5 kB)\n",
      "Collecting itsdangerous>=2.2.0 (from flask->brax)\n",
      "  Using cached itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)\n",
      "Requirement already satisfied: markupsafe>=2.1.1 in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from flask->brax) (3.0.2)\n",
      "Collecting werkzeug>=3.1.0 (from flask->brax)\n",
      "  Using cached werkzeug-3.1.3-py3-none-any.whl.metadata (3.7 kB)\n",
      "Collecting msgpack (from flax->brax)\n",
      "  Downloading msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl.metadata (8.4 kB)\n",
      "Collecting tensorstore (from flax->brax)\n",
      "  Downloading tensorstore-0.1.76-cp313-cp313-macosx_11_0_arm64.whl.metadata (21 kB)\n",
      "Collecting rich>=11.1 (from flax->brax)\n",
      "  Downloading rich-14.1.0-py3-none-any.whl.metadata (18 kB)\n",
      "Requirement already satisfied: PyYAML>=5.4.1 in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from flax->brax) (6.0.2)\n",
      "Collecting treescope>=0.1.7 (from flax->brax)\n",
      "  Downloading treescope-0.1.9-py3-none-any.whl.metadata (6.6 kB)\n",
      "Collecting markdown-it-py>=2.2.0 (from rich>=11.1->flax->brax)\n",
      "  Using cached markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n",
      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from rich>=11.1->flax->brax) (2.19.1)\n",
      "Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=11.1->flax->brax)\n",
      "  Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n",
      "Requirement already satisfied: glfw in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco->brax) (2.9.0)\n",
      "Requirement already satisfied: pyopengl in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from mujoco->brax) (3.1.9)\n",
      "Requirement already satisfied: fsspec in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco->brax) (2025.5.1)\n",
      "Requirement already satisfied: importlib_resources in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco->brax) (6.5.2)\n",
      "Requirement already satisfied: zipp in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from etils[epath]->mujoco->brax) (3.23.0)\n",
      "Collecting chex>=0.1.87 (from optax->brax)\n",
      "  Downloading chex-0.1.90-py3-none-any.whl.metadata (18 kB)\n",
      "Requirement already satisfied: setuptools in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from chex>=0.1.87->optax->brax) (78.1.1)\n",
      "Collecting toolz>=0.9.0 (from chex>=0.1.87->optax->brax)\n",
      "  Downloading toolz-1.0.0-py3-none-any.whl.metadata (5.1 kB)\n",
      "Requirement already satisfied: nest_asyncio in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from orbax-checkpoint->brax) (1.6.0)\n",
      "Collecting aiofiles (from orbax-checkpoint->brax)\n",
      "  Using cached aiofiles-24.1.0-py3-none-any.whl.metadata (10 kB)\n",
      "Collecting protobuf (from orbax-checkpoint->brax)\n",
      "  Using cached protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl.metadata (593 bytes)\n",
      "Collecting humanize (from orbax-checkpoint->brax)\n",
      "  Downloading humanize-4.12.3-py3-none-any.whl.metadata (7.8 kB)\n",
      "Collecting simplejson>=3.16.0 (from orbax-checkpoint->brax)\n",
      "  Downloading simplejson-3.20.1-cp313-cp313-macosx_11_0_arm64.whl.metadata (3.3 kB)\n",
      "Requirement already satisfied: packaging in /Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages (from tensorboardx->brax) (25.0)\n",
      "Downloading brax-0.12.4-py3-none-any.whl (341 kB)\n",
      "Using cached flask-3.1.1-py3-none-any.whl (103 kB)\n",
      "Using cached blinker-1.9.0-py3-none-any.whl (8.5 kB)\n",
      "Using cached click-8.2.1-py3-none-any.whl (102 kB)\n",
      "Using cached itsdangerous-2.2.0-py3-none-any.whl (16 kB)\n",
      "Using cached werkzeug-3.1.3-py3-none-any.whl (224 kB)\n",
      "Downloading flask_cors-6.0.1-py3-none-any.whl (13 kB)\n",
      "Downloading flax-0.11.0-py3-none-any.whl (455 kB)\n",
      "Downloading rich-14.1.0-py3-none-any.whl (243 kB)\n",
      "Using cached markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n",
      "Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n",
      "Downloading treescope-0.1.9-py3-none-any.whl (182 kB)\n",
      "Downloading jaxopt-0.8.5-py3-none-any.whl (172 kB)\n",
      "Downloading ml_collections-1.1.0-py3-none-any.whl (76 kB)\n",
      "Downloading msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl (78 kB)\n",
      "Downloading optax-0.2.5-py3-none-any.whl (354 kB)\n",
      "Downloading chex-0.1.90-py3-none-any.whl (101 kB)\n",
      "Downloading toolz-1.0.0-py3-none-any.whl (56 kB)\n",
      "Downloading orbax_checkpoint-0.11.20-py3-none-any.whl (510 kB)\n",
      "Downloading simplejson-3.20.1-cp313-cp313-macosx_11_0_arm64.whl (75 kB)\n",
      "Downloading tensorstore-0.1.76-cp313-cp313-macosx_11_0_arm64.whl (13.6 MB)\n",
      "\u001b[2K   \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.6/13.6 MB\u001b[0m \u001b[31m15.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m[36m0:00:01\u001b[0m[36m0:00:01\u001b[0m\n",
      "\u001b[?25hUsing cached aiofiles-24.1.0-py3-none-any.whl (15 kB)\n",
      "Downloading humanize-4.12.3-py3-none-any.whl (128 kB)\n",
      "Using cached protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl (425 kB)\n",
      "Downloading tensorboardx-2.6.4-py3-none-any.whl (87 kB)\n",
      "Installing collected packages: werkzeug, treescope, toolz, simplejson, protobuf, msgpack, ml-collections, mdurl, itsdangerous, humanize, click, blinker, aiofiles, tensorstore, tensorboardx, markdown-it-py, flask, rich, flask-cors, orbax-checkpoint, jaxopt, chex, optax, flax, brax\n",
      "\u001b[2K   \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m25/25\u001b[0m [brax]8;5;237m━━━\u001b[0m \u001b[32m23/25\u001b[0m [flax]oint]e]\n",
      "\u001b[1A\u001b[2KSuccessfully installed aiofiles-24.1.0 blinker-1.9.0 brax-0.12.4 chex-0.1.90 click-8.2.1 flask-3.1.1 flask-cors-6.0.1 flax-0.11.0 humanize-4.12.3 itsdangerous-2.2.0 jaxopt-0.8.5 markdown-it-py-3.0.0 mdurl-0.1.2 ml-collections-1.1.0 msgpack-1.1.1 optax-0.2.5 orbax-checkpoint-0.11.20 protobuf-6.31.1 rich-14.1.0 simplejson-3.20.1 tensorboardx-2.6.4 tensorstore-0.1.76 toolz-1.0.0 treescope-0.1.9 werkzeug-3.1.3\n"
     ]
    }
   ],
   "source": [
    "!pip install mujoco\n",
    "!pip install mujoco_mjx\n",
    "!pip install brax"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2050e7de",
   "metadata": {},
   "source": [
    "## Check Mujoco installation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d8d5c820",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fri Aug  8 13:34:10 2025       \n",
      "+-----------------------------------------------------------------------------------------+\n",
      "| NVIDIA-SMI 575.64.03              Driver Version: 575.64.03      CUDA Version: 12.9     |\n",
      "|-----------------------------------------+------------------------+----------------------+\n",
      "| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |\n",
      "| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |\n",
      "|                                         |                        |               MIG M. |\n",
      "|=========================================+========================+======================|\n",
      "|   0  NVIDIA GeForce RTX 4080        Off |   00000000:04:00.0  On |                  N/A |\n",
      "|  0%   50C    P3             39W /  340W |    4304MiB /  16376MiB |     36%      Default |\n",
      "|                                         |                        |                  N/A |\n",
      "+-----------------------------------------+------------------------+----------------------+\n",
      "                                                                                         \n",
      "+-----------------------------------------------------------------------------------------+\n",
      "| Processes:                                                                              |\n",
      "|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |\n",
      "|        ID   ID                                                               Usage      |\n",
      "|=========================================================================================|\n",
      "|    0   N/A  N/A           77274      G   /usr/lib/xorg/Xorg                      152MiB |\n",
      "|    0   N/A  N/A           78191      G   ...exec/xdg-desktop-portal-gnome          4MiB |\n",
      "|    0   N/A  N/A           88962    C+G   /usr/bin/warp-terminal                  145MiB |\n",
      "|    0   N/A  N/A          190365      G   /usr/lib/xorg/Xorg                      823MiB |\n",
      "|    0   N/A  N/A          190743      G   /usr/bin/gnome-shell                    231MiB |\n",
      "|    0   N/A  N/A          191630      G   .../6565/usr/lib/firefox/firefox        310MiB |\n",
      "|    0   N/A  N/A          193041      G   /usr/share/code/code                    190MiB |\n",
      "|    0   N/A  N/A          217662    C+G   target/release/voxelsim-renderer        365MiB |\n",
      "|    0   N/A  N/A          219647    C+G   target/release/voxelsim-renderer        532MiB |\n",
      "|    0   N/A  N/A          236086      G   ...144 --variations-seed-version        109MiB |\n",
      "|    0   N/A  N/A          246492    C+G   ...forge3/envs/mujoco/bin/python        411MiB |\n",
      "|    0   N/A  N/A          262275      G   /usr/bin/gnome-control-center            16MiB |\n",
      "+-----------------------------------------------------------------------------------------+\n",
      "Setting environment variable to use GPU rendering:\n",
      "env: MUJOCO_GL=egl\n",
      "Checking that the installation succeeded:\n",
      "Installation successful.\n"
     ]
    }
   ],
   "source": [
    "#@title Check if MuJoCo installation was successful\n",
    "\n",
    "import distutils.util\n",
    "import os\n",
    "import subprocess\n",
    "if subprocess.run('nvidia-smi').returncode:\n",
    "  raise RuntimeError(\n",
    "      'Cannot communicate with GPU. '\n",
    "      'Make sure you are using a GPU Colab runtime. '\n",
    "      'Go to the Runtime menu and select Choose runtime type.')\n",
    "\n",
    "# Add an ICD config so that glvnd can pick up the Nvidia EGL driver.\n",
    "# This is usually installed as part of an Nvidia driver package, but the Colab\n",
    "# kernel doesn't install its driver via APT, and as a result the ICD is missing.\n",
    "# (https://github.com/NVIDIA/libglvnd/blob/master/src/EGL/icd_enumeration.md)\n",
    "NVIDIA_ICD_CONFIG_PATH = '/usr/share/glvnd/egl_vendor.d/10_nvidia.json'\n",
    "if not os.path.exists(NVIDIA_ICD_CONFIG_PATH):\n",
    "  with open(NVIDIA_ICD_CONFIG_PATH, 'w') as f:\n",
    "    f.write(\"\"\"{\n",
    "    \"file_format_version\" : \"1.0.0\",\n",
    "    \"ICD\" : {\n",
    "        \"library_path\" : \"libEGL_nvidia.so.0\"\n",
    "    }\n",
    "}\n",
    "\"\"\")\n",
    "\n",
    "# Configure MuJoCo to use the EGL rendering backend (requires GPU)\n",
    "print('Setting environment variable to use GPU rendering:')\n",
    "%env MUJOCO_GL=egl\n",
    "\n",
    "try:\n",
    "  print('Checking that the installation succeeded:')\n",
    "  import mujoco\n",
    "  mujoco.MjModel.from_xml_string('<mujoco/>')\n",
    "except Exception as e:\n",
    "  raise e from RuntimeError(\n",
    "      'Something went wrong during installation. Check the shell output above '\n",
    "      'for more information.\\n'\n",
    "      'If using a hosted Colab runtime, make sure you enable GPU acceleration '\n",
    "      'by going to the Runtime menu and selecting \"Choose runtime type\".')\n",
    "\n",
    "print('Installation successful.')\n",
    "\n",
    "# Tell XLA to use Triton GEMM, this improves steps/sec by ~30% on some GPUs\n",
    "xla_flags = os.environ.get('XLA_FLAGS', '')\n",
    "xla_flags += ' --xla_gpu_triton_gemm_any=True'\n",
    "os.environ['XLA_FLAGS'] = xla_flags\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d19aaf00",
   "metadata": {},
   "source": [
    "## Import packages for plotting and creating graphics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "697428ff",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Installing mediapy:\n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "import itertools\n",
    "import numpy as np\n",
    "from typing import Callable, NamedTuple, Optional, Union, List\n",
    "\n",
    "# Graphics and plotting.\n",
    "print('Installing mediapy:')\n",
    "!command -v ffmpeg >/dev/null || (apt update && apt install -y ffmpeg)\n",
    "!pip install -q mediapy\n",
    "import mediapy as media\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# More legible printing from numpy.\n",
    "np.set_printoptions(precision=3, suppress=True, linewidth=100)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ea7f4dd",
   "metadata": {},
   "source": [
    "## Import Mujoco, MJX, and Brax"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "98b72959",
   "metadata": {},
   "outputs": [],
   "source": [
    "from datetime import datetime\n",
    "from etils import epath\n",
    "import functools\n",
    "from IPython.display import HTML\n",
    "from typing import Any, Dict, Sequence, Tuple, Union\n",
    "import os\n",
    "from ml_collections import config_dict\n",
    "\n",
    "\n",
    "import jax\n",
    "from jax import numpy as jp\n",
    "import numpy as np\n",
    "from flax.training import orbax_utils\n",
    "from flax import struct\n",
    "from matplotlib import pyplot as plt\n",
    "import mediapy as media\n",
    "from orbax import checkpoint as ocp\n",
    "\n",
    "import mujoco\n",
    "from mujoco import mjx\n",
    "\n",
    "from brax import base\n",
    "from brax import envs\n",
    "from brax import math\n",
    "from brax.base import Base, Motion, Transform\n",
    "from brax.base import State as PipelineState\n",
    "from brax.envs.base import Env, PipelineEnv, State\n",
    "from brax.mjx.base import State as MjxState\n",
    "from brax.training.agents.ppo import train as ppo\n",
    "from brax.training.agents.ppo import networks as ppo_networks\n",
    "from brax.io import html, mjcf, model\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62e85562",
   "metadata": {},
   "source": [
    "# LeLamp Model"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3858cde3",
   "metadata": {},
   "source": [
    "Import LeLamp Mujoco Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c6aefa2a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mj_model = mujoco.MjModel.from_xml_path('../models/lelamp/scene.xml')\n",
    "\n",
    "# See number of joints in the model\n",
    "mj_model.njnt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "469491c2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.]),\n",
       " array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n",
       " array([0., 0., 0., 0., 0., 0.]))"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mj_data = mujoco.MjData(mj_model)\n",
    "\n",
    "# See qpos and qvel\n",
    "mj_data.qpos, mj_data.qvel, mj_data.sensordata"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f20e2182",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0.])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mj_data.subtree_com[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4fcb4038",
   "metadata": {},
   "outputs": [],
   "source": [
    "renderer = mujoco.Renderer(mj_model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "0b7ca1df",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.] <class 'numpy.ndarray'>\n",
      "[0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.] <class 'jaxlib._jax.ArrayImpl'> {CudaDevice(id=0)}\n"
     ]
    }
   ],
   "source": [
    "mjx_model = mjx.put_model(mj_model)\n",
    "mjx_data = mjx.put_data(mj_model, mj_data)\n",
    "\n",
    "print(mj_data.qpos, type(mj_data.qpos))\n",
    "print(mjx_data.qpos, type(mjx_data.qpos), mjx_data.qpos.devices())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "108171e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.22920934106829194)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "mujoco.mj_forward(mj_model, mj_data)\n",
    "# Healthy reward\n",
    "lamp_head_id = mujoco.mj_name2id(\n",
    "    mj_model,\n",
    "    mujoco.mjtObj.mjOBJ_BODY,\n",
    "    \"lamp_head\"\n",
    ")\n",
    "lamp_head_pos = mj_data.xpos[lamp_head_id]\n",
    "lamp_head_pos[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c3166e71",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<_MjContactList\n",
       "  H: array([], shape=(0, 36), dtype=float64)\n",
       "  dim: array([], dtype=int32)\n",
       "  dist: array([], dtype=float64)\n",
       "  efc_address: array([], dtype=int32)\n",
       "  elem: array([], shape=(0, 2), dtype=int32)\n",
       "  exclude: array([], dtype=int32)\n",
       "  flex: array([], shape=(0, 2), dtype=int32)\n",
       "  frame: array([], shape=(0, 9), dtype=float64)\n",
       "  friction: array([], shape=(0, 5), dtype=float64)\n",
       "  geom: array([], shape=(0, 2), dtype=int32)\n",
       "  geom1: array([], dtype=int32)\n",
       "  geom2: array([], dtype=int32)\n",
       "  includemargin: array([], dtype=float64)\n",
       "  mu: array([], dtype=float64)\n",
       "  pos: array([], shape=(0, 3), dtype=float64)\n",
       "  solimp: array([], shape=(0, 5), dtype=float64)\n",
       "  solref: array([], shape=(0, 2), dtype=float64)\n",
       "  solreffriction: array([], shape=(0, 2), dtype=float64)\n",
       "  vert: array([], shape=(0, 2), dtype=int32)\n",
       ">"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num_contacts = mj_data.ncon\n",
    "num_contacts"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e975d116",
   "metadata": {},
   "source": [
    "## Test Model Control"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "20b1a1d3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"show_videos\" style=\"border-spacing:0px;\"><tr><td style=\"padding:1px;\"><video controls width=\"320\" height=\"240\" style=\"object-fit:cover;\" loop autoplay muted>\n",
       "      <source src=\"data:video/mp4;base64,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VQAB91UAAAAYc3R0cwAAAAAAAAABAAAA5QAAAQAAAAAUc3RzcwAAAAAAAAABAAAAAQAABhhjdHRzAAAAAAAAAMEAAAABAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAIAAAIAAAAAAQAABAAAAAACAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAwAAAgAAAAABAAADAAAAAAEAAAEAAAAABAAAAgAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAABAAAAAACAAABAAAAAAEAAAQAAAAAAgAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAABAAACAAAAAAEAAAUAAAAA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\" type=\"video/mp4\"/>\n",
       "      This browser does not support the video tag.\n",
       "      </video></td></tr></table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "# Your scene_option and simulation setup as before...\n",
    "scene_option = mujoco.MjvOption()\n",
    "scene_option.flags[mujoco.mjtVisFlag.mjVIS_JOINT] = True\n",
    "\n",
    "duration = 3.8  # seconds\n",
    "framerate = 60  # Hz\n",
    "\n",
    "frames = []\n",
    "mujoco.mj_resetData(mj_model, mj_data)\n",
    "\n",
    "com = []\n",
    "\n",
    "while mj_data.time < duration:\n",
    "    t = mj_data.time\n",
    "\n",
    "    # Control input for all 12 actuators\n",
    "    ctrl = np.zeros(5)\n",
    "\n",
    "    # Example: oscillate the last 5 position actuators with different frequencies\n",
    "    for i in range(5):\n",
    "        ctrl[i] = 0.5 * np.sin(2 * np.pi * (i - 6) * t)  # small amplitude sine\n",
    "\n",
    "    mj_data.ctrl[:] = ctrl\n",
    "\n",
    "    mujoco.mj_step(mj_model, mj_data)\n",
    "\n",
    "    # Record the center of mass position\n",
    "    # com.append(mj_data.subtree_com[\"dc15_a01_dummy_assy_idle_asm\"].copy())\n",
    "\n",
    "    if len(frames) < mj_data.time * framerate:\n",
    "        renderer.update_scene(mj_data, scene_option=scene_option)\n",
    "        pixels = renderer.render()\n",
    "        frames.append(pixels)\n",
    "\n",
    "media.show_video(frames, fps=framerate)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "328f42c3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# RL Environment\n",
    "MODEL_PATH = '../models/lelamp/scene.xml'\n",
    "\n",
    "\n",
    "class LeLampEnv(PipelineEnv):\n",
    "    \"\"\"LeLamp environment.\"\"\"\n",
    "\n",
    "\n",
    "    def __init__(\n",
    "        self,\n",
    "        forward_reward_weight=1.25,\n",
    "        healthy_reward=5.0,\n",
    "        terminate_when_unhealthy=True,\n",
    "        healthy_z_range=(1.0, 2.0),\n",
    "        reset_noise_scale=1e-2,\n",
    "        **kwargs,\n",
    "    ):\n",
    "        # Initialize the environment with the given parameters.\n",
    "        mj_model = mujoco.MjModel.from_xml_path(MODEL_PATH)\n",
    "        mj_model.opt.solver = mujoco.mjtSolver.mjSOL_CG\n",
    "        mj_model.opt.iterations = 6\n",
    "        mj_model.opt.ls_iterations = 6\n",
    "\n",
    "        sys = mjcf.load_model(mj_model)\n",
    "        self.sys = sys\n",
    "\n",
    "        physics_steps_per_control_step = 5\n",
    "        kwargs['n_frames'] = kwargs.get('n_frames', physics_steps_per_control_step)\n",
    "        kwargs['backend'] = 'mjx'\n",
    "\n",
    "        super().__init__(sys, **kwargs)\n",
    "\n",
    "        # Set up the pipeline for the environment.\n",
    "        self._forward_reward_weight = forward_reward_weight\n",
    "        self._healthy_reward = healthy_reward\n",
    "        self._terminate_when_unhealthy = terminate_when_unhealthy\n",
    "        self._healthy_z_range = healthy_z_range\n",
    "        self._reset_noise_scale = reset_noise_scale\n",
    "\n",
    "    def reset(self, rng: jp.ndarray) -> State:\n",
    "        \"\"\"Resets the environment to an initial state.\"\"\"\n",
    "        rng, rng1, rng2 = jax.random.split(rng, 3)\n",
    "\n",
    "        low, hi = -self._reset_noise_scale, self._reset_noise_scale\n",
    "\n",
    "        # Generalized q pos\n",
    "        qpos = self.sys.qpos0 + jax.random.uniform(\n",
    "            rng1, (self.sys.nq,), minval=low, maxval=hi\n",
    "        )\n",
    "\n",
    "        # Generalized q vel\n",
    "        qvel = jax.random.uniform(\n",
    "            rng2, (self.sys.nv,), minval=low, maxval=hi\n",
    "        )\n",
    "\n",
    "        # Init brax pipeline state\n",
    "        data = self.pipeline_init(qpos, qvel)\n",
    "\n",
    "        # Get the initial observation\n",
    "        obs = self._get_obs(data, jp.zeros(self.sys.nu))\n",
    "\n",
    "        # Initialize reward, done, and metrics\n",
    "        reward, done, zero = jp.zeros(3)\n",
    "        metrics = {\n",
    "            'forward_reward': zero,\n",
    "            'reward_linvel': zero,\n",
    "            'reward_alive': zero,\n",
    "            'x_position': zero,\n",
    "            'y_position': zero,\n",
    "            'distance_from_origin': zero,\n",
    "            'x_velocity': zero,\n",
    "            'y_velocity': zero,\n",
    "        }\n",
    "        return State(data, obs, reward, done, metrics)\n",
    "    \n",
    "    def step(self, state: State, action: jp.ndarray) -> State:\n",
    "        \"\"\"Steps the environment forward by one timestep.\"\"\"\n",
    "        data0 = state.pipeline_state\n",
    "        data = self.pipeline_step(data0, action)\n",
    "\n",
    "        # ID of body to control\n",
    "        body_id = mujoco.mj_name2id(mj_model, mujoco.mjtObj.mjOBJ_BODY, \"dc15_a01_dummy_assy_idle_asm\")\n",
    "\n",
    "        # Forward reward\n",
    "        com_before = data0.subtree_com[body_id]\n",
    "        com_after = data.subtree_com[body_id]\n",
    "        velocity = (com_after - com_before) / self.dt\n",
    "        forward_reward = self._forward_reward_weight * velocity[0]\n",
    "\n",
    "        # Healthy reward\n",
    "        lamp_head_id = self.sys.body.index['lamp_head']\n",
    "        lamp_head_pos = data.xpos[lamp_head_id]\n",
    "\n",
    "        min_z, max_z = self._healthy_z_range\n",
    "        is_healthy = jp.where(lamp_head_pos[2] < min_z, 0.0, 1.0)\n",
    "        is_healthy = jp.where(lamp_head_pos[2] > max_z, 0.0, is_healthy)\n",
    "        healthy_reward = self._healthy_reward * is_healthy\n",
    "\n",
    "        obs = self._get_obs(data, action)\n",
    "\n",
    "        # Calculate the reward\n",
    "        reward = forward_reward + healthy_reward\n",
    "        done = 0.0\n",
    "\n",
    "        state.metrics.update({\n",
    "            'forward_reward': forward_reward,\n",
    "            'reward_linvel': forward_reward,\n",
    "            'reward_alive': healthy_reward,\n",
    "            'x_position': com_after[0],\n",
    "            'y_position': com_after[1],\n",
    "            'distance_from_origin': jp.linalg.norm(com_after),\n",
    "            'x_velocity': velocity[0],\n",
    "            'y_velocity': velocity[1],\n",
    "        })\n",
    "\n",
    "        return state.replace(\n",
    "            pipeline_state=data,\n",
    "            obs=obs,\n",
    "            reward=reward,\n",
    "            done=done,\n",
    "        )\n",
    "\n",
    "    def _get_obs(\n",
    "        self, data: mjx.Data, action: jp.ndarray\n",
    "    ) -> jp.ndarray:\n",
    "        # Get the current position\n",
    "        position = data.qpos[7:]\n",
    "\n",
    "        # Get joint velocities\n",
    "        velocities = data.qvel[6:]\n",
    "\n",
    "        # Get sensor data\n",
    "        sensor_data = data.sensordata[:6]\n",
    "\n",
    "        return jp.concatenate([position, velocities, sensor_data])\n",
    "\n",
    "envs.register_environment('lelamp', LeLampEnv)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "88082951",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/mujoco/mjx/_src/mesh.py:141: UserWarning: Mesh \"base\" has a coplanar face with more than 20 vertices. This may lead to performance issues and inaccuracies in collision detection. Consider decimating the mesh.\n",
      "  warnings.warn(\n",
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/mujoco/mjx/_src/mesh.py:141: UserWarning: Mesh \"bts2_m2_6x8\" has a coplanar face with more than 20 vertices. This may lead to performance issues and inaccuracies in collision detection. Consider decimating the mesh.\n",
      "  warnings.warn(\n",
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/mujoco/mjx/_src/mesh.py:141: UserWarning: Mesh \"dc15_a01_case_m_dummy\" has a coplanar face with more than 20 vertices. This may lead to performance issues and inaccuracies in collision detection. Consider decimating the mesh.\n",
      "  warnings.warn(\n",
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/mujoco/mjx/_src/mesh.py:141: UserWarning: Mesh \"dc15_a01_horn_dummy\" has a coplanar face with more than 20 vertices. This may lead to performance issues and inaccuracies in collision detection. Consider decimating the mesh.\n",
      "  warnings.warn(\n",
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/mujoco/mjx/_src/mesh.py:141: UserWarning: Mesh \"dc15_a01_horn_idle2_dummy\" has a coplanar face with more than 20 vertices. This may lead to performance issues and inaccuracies in collision detection. Consider decimating the mesh.\n",
      "  warnings.warn(\n",
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/mujoco/mjx/_src/mesh.py:141: UserWarning: Mesh \"dc15_a01_idle_cap_dummy\" has a coplanar face with more than 20 vertices. This may lead to performance issues and inaccuracies in collision detection. Consider decimating the mesh.\n",
      "  warnings.warn(\n",
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/mujoco/mjx/_src/mesh.py:141: UserWarning: Mesh \"arm_length_15cm\" has a coplanar face with more than 20 vertices. This may lead to performance issues and inaccuracies in collision detection. Consider decimating the mesh.\n",
      "  warnings.warn(\n",
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/mujoco/mjx/_src/mesh.py:141: UserWarning: Mesh \"arm_length_10cm\" has a coplanar face with more than 20 vertices. This may lead to performance issues and inaccuracies in collision detection. Consider decimating the mesh.\n",
      "  warnings.warn(\n",
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/mujoco/mjx/_src/mesh.py:141: UserWarning: Mesh \"angle_joint\" has a coplanar face with more than 20 vertices. This may lead to performance issues and inaccuracies in collision detection. Consider decimating the mesh.\n",
      "  warnings.warn(\n",
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/mujoco/mjx/_src/mesh.py:141: UserWarning: Mesh \"lamp_head\" has a coplanar face with more than 20 vertices. This may lead to performance issues and inaccuracies in collision detection. Consider decimating the mesh.\n",
      "  warnings.warn(\n",
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/brax/io/mjcf.py:480: UserWarning: Brax System, piplines and environments are not actively being maintained. Please see MJX for a well maintained JAX-based physics engine: https://github.com/google-deepmind/mujoco/tree/main/mjx. For a host of environments that use MJX, see: https://github.com/google-deepmind/mujoco_playground.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "# instantiate the environment\n",
    "env_name = 'lelamp'\n",
    "env = envs.get_environment(env_name)\n",
    "\n",
    "# define the jit reset/step functions\n",
    "jit_reset = jax.jit(env.reset)\n",
    "jit_step = jax.jit(env.step)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "758fdec5",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/jax/_src/interpreters/xla.py:119: RuntimeWarning: overflow encountered in cast\n",
      "  return np.asarray(x, dtypes.canonicalize_dtype(x.dtype))\n",
      "Exception ignored in: <bound method IPythonKernel._clean_thread_parent_frames of <ipykernel.ipkernel.IPythonKernel object at 0x1103642f0>>\n",
      "Traceback (most recent call last):\n",
      "  File \"/Users/binhpham/miniconda3/envs/mujoco-tut/lib/python3.13/site-packages/ipykernel/ipkernel.py\", line 775, in _clean_thread_parent_frames\n",
      "    def _clean_thread_parent_frames(\n",
      "KeyboardInterrupt: \n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "\n",
    "start = time.time()\n",
    "\n",
    "state = jit_reset(jax.random.PRNGKey(0))\n",
    "rollout = [state.pipeline_state]\n",
    "\n",
    "for i in range(10):\n",
    "    ctrl = -0.1 * jp.ones(env.sys.nu)\n",
    "    state = jit_step(state, ctrl)\n",
    "    rollout.append(state.pipeline_state)\n",
    "    print(f\"Step {i+1} done, elapsed: {time.time() - start:.2f} sec\")\n",
    "\n",
    "print(\"Rollout finished in\", time.time() - start, \"seconds\")\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "mujoco",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
